package com.winsdom.config;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.annotation.PostConstruct;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;

@Component
public class InMemoryConfig {
    private final ConcurrentHashMap<String, String> configMap = new ConcurrentHashMap<>();
    private static final String CONFIG_KEY = "notification:billRemark"; //  Redis 键名（避免冲突）
    private static final long EXPIRE_TIME = 365 * 24 * 60 * 60; // 过期时间（1年，根据需求调整）

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 初始化：从 Redis 加载配置到内存
     */
    @PostConstruct
    public void init() {
        String value = redisTemplate.opsForValue().get(CONFIG_KEY);
        if (value != null) {
            configMap.put(CONFIG_KEY, value);
        }
    }

    /**
     * 获取配置（优先从内存获取，无则从 Redis 加载）
     */
    public String get() {
        String value = configMap.get(CONFIG_KEY);
        if (value == null) {
            value = redisTemplate.opsForValue().get(CONFIG_KEY);
            if (value != null) {
                configMap.put(CONFIG_KEY, value);
            }
        }
        return value;
    }

    /**
     * 更新配置（同时写入内存和 Redis）
     */
    public void set(String value) {
        configMap.put(CONFIG_KEY, value);
        redisTemplate.opsForValue().set(CONFIG_KEY, value, EXPIRE_TIME, TimeUnit.SECONDS);
    }
}